package issr.market.controller;

import issr.market.model.ErogazioneProdotto;
import issr.market.model.Prodotto;
import issr.market.services.ErogazioneProdottiService;
import issr.market.services.GestioneProdottiService;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;

import org.apache.log4j.Logger;

public class OperatoreBancoController extends AbstractController {

	private static final long serialVersionUID = -3179841867428557386L;
	private Logger logger = Logger.getLogger(OperatoreBancoController.class);
	
	private static final String SEGNALA_SCADUTI = "segnalaScaduti";
	private static final String EROGA_PRODOTTI = "erogaProdotti";

	private String ricevutaBox;
	private boolean checkStep = false;
	private String message = "";
	private String secondStep;
	
	private String[] idProdotto;
	private String[] idLotti;
	private String[] qProdotti;
	
	private List<ErogazioneProdotto> validiList;
	private List<ErogazioneProdotto> scadutiList;
	private List<ErogazioneProdotto> limitatiList;
	private List<Prodotto> esauritiList;
	
	@SuppressWarnings("unchecked")
	@Override
	public String execute() {
		
		if(accessForbidden())
			return "login";
		
		
		
		if(getActionToDo()!=null && getActionToDo().equals(SEGNALA_SCADUTI)){
			logger.info("idLotti size: "+idLotti.length);
			message = GestioneProdottiService.segnalaScaduti(idLotti);
			
			logger.info(message);
			return "esito";
		}
		if(getActionToDo()!=null && getActionToDo().equals(EROGA_PRODOTTI)){
			validiList = new ArrayList<ErogazioneProdotto>();
			scadutiList = new ArrayList<ErogazioneProdotto>();
			limitatiList = new ArrayList<ErogazioneProdotto>();
			esauritiList = new ArrayList<Prodotto>();
			
			boolean second = secondStep!=null && secondStep.equals('Y') ? true : false;
			boolean ricevuta = ricevutaBox!=null?true:false;
			
			Map<String, List<? extends Object>> listMap = ErogazioneProdottiService.erogaProdotti(idProdotto, qProdotti, second, ricevuta, message);
			
			validiList = (List<ErogazioneProdotto>)listMap.get(ErogazioneProdottiService.VALIDI_LIST);
			scadutiList = (List<ErogazioneProdotto>)listMap.get(ErogazioneProdottiService.SCADUTI_LIST);
			limitatiList = (List<ErogazioneProdotto>)listMap.get(ErogazioneProdottiService.LIMITATI_LIST);
			esauritiList = (List<Prodotto>)listMap.get(ErogazioneProdottiService.ESAURITI_LIST);
			
			if(!limitatiList.isEmpty() || !esauritiList.isEmpty() || !scadutiList.isEmpty()){
				logger.info("Sono stati individuati alcuni importanti eventi nella gestione dell'erogazione prodotti");
				
				checkStep = true;
				
			}
		 	
		 	
		}
		
		return "success";
	}

	public String getMessage() {
		return message;
	}

	public void setMessage(String message) {
		this.message = message;
	}

	public String[] getIdLotti() {
		return idLotti;
	}

	public void setIdLotti(String[] idLotti) {
		this.idLotti = idLotti;
	}

	public String getRicevutaBox() {
		return ricevutaBox;
	}

	public void setRicevutaBox(String ricevutaBox) {
		this.ricevutaBox = ricevutaBox;
	}

	public boolean getCheckStep() {
		return checkStep;
	}

	public void setCheckStep(boolean checkStep) {
		this.checkStep = checkStep;
	}

	public String[] getIdProdotto() {
		return idProdotto;
	}

	public void setIdProdotto(String[] idProdotto) {
		this.idProdotto = idProdotto;
	}

	public String[] getQProdotti() {
		return qProdotti;
	}

	public void setQProdotti(String[] qProdotti) {
		this.qProdotti = qProdotti;
	}

	public List<ErogazioneProdotto> getValidiList() {
		return validiList;
	}

	public void setValidiList(List<ErogazioneProdotto> validiList) {
		this.validiList = validiList;
	}

	public List<ErogazioneProdotto> getScadutiList() {
		return scadutiList;
	}

	public void setScadutiList(List<ErogazioneProdotto> scadutiList) {
		this.scadutiList = scadutiList;
	}

	public List<ErogazioneProdotto> getLimitatiList() {
		return limitatiList;
	}

	public void setLimitatiList(List<ErogazioneProdotto> limitatiList) {
		this.limitatiList = limitatiList;
	}

	public List<Prodotto> getEsauritiList() {
		return esauritiList;
	}

	public void setEsauritiList(List<Prodotto> esauritiList) {
		this.esauritiList = esauritiList;
	}

	public String getSecondStep() {
		return secondStep;
	}

	public void setSecondStep(String secondStep) {
		this.secondStep = secondStep;
	}
	
	
	
	

}
